#include "board.h"
#include "led.h"
#include <stdbool.h>

#define  GPIO_SPEED   GPIO_Speed_50MHz

/* 定义结构体常量 并用static修饰外部不可调用 */
static struct led_selc led_selc_1 = 
    {   
        RCC_AHB1Periph_GPIOE,
        GPIOE,
        GPIO_Pin_5,
        GPIO_Mode_OUT,
        GPIO_OType_PP,
        GPIO_PuPd_UP,
        Bit_RESET,
        Bit_SET
    };
static struct led_selc led_selc_2 = 
    {
        RCC_AHB1Periph_GPIOE,
        GPIOE,
        GPIO_Pin_6,
        GPIO_Mode_OUT,
        GPIO_OType_PP,
        GPIO_PuPd_UP,
        Bit_RESET,
        Bit_SET
    };
static struct led_selc led_selc_3 = 
    {
        RCC_AHB1Periph_GPIOC,
        GPIOC,
        GPIO_Pin_13,
        GPIO_Mode_OUT,
        GPIO_OType_PP,
        GPIO_PuPd_UP,
        Bit_RESET,
        Bit_SET
    };

/* 取结构体地址 */
led_t led1 = &led_selc_1;
led_t led2 = &led_selc_2;
led_t led3 = &led_selc_3;

void led_lowlever_init(led_t led)
{
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = led->GPIO_Mode;
    GPIO_InitStructure.GPIO_OType = led->GPIO_OType;
    GPIO_InitStructure.GPIO_Pin = led->GPIO_Pin;
    GPIO_InitStructure.GPIO_PuPd = led->GPIO_PuPd;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED;
    GPIO_Init(led->GPIOx,&GPIO_InitStructure);

    GPIO_WriteBit(led->GPIOx,led->GPIO_Pin,led->led_off);
}

void led_set_onoff(led_t led,bool bit)
{
    bit ? GPIO_WriteBit(led->GPIOx,led->GPIO_Pin,led->led_off):
    GPIO_WriteBit(led->GPIOx,led->GPIO_Pin,led->led_on);
}

void led_toggle(led_t led)
{
     GPIO_WriteBit(led->GPIOx,led->GPIO_Pin,
        (GPIO_ReadInputDataBit(led->GPIOx,led->GPIO_Pin)?Bit_RESET:Bit_SET));
}
